Skip to content

Feat/migrate kb dsh plugin - #175

Merged
clark-fc merged 46 commits into
mainfrom
feat/migrate-kb-dsh-plugin
Aug 25, 2026
Merged

Feat/migrate kb dsh plugin#175
clark-fc merged 46 commits into
mainfrom
feat/migrate-kb-dsh-plugin

Conversation

@clark-fc

Copy link
Copy Markdown
Collaborator

背景

百炼知识库的 DeepSeek Harness (dsh) 插件此前在独立仓库演进。为了让它与 bl CLI 的知识库能力共享同一份 API 认知、文档体系和工程约定,本 PR 把它以 git subtree 的方式迁入本仓库 packages/bailian-kb-dsh,并按本仓库约定完成改造、接入 CI 发布。

插件的定位是下游宿主适配层:依赖方向朝外(消费 bl CLI 与百炼知识库 API,运行在 dsh 里),不在 core → runtime → commands → 产品入口 这条分层链上。因此它在版本、构建、发布三处都是刻意偏离仓库通行约定的。

变更内容

1. 新包 packages/bailian-kb-dsh9112a88 subtree 迁入 + 后续改造)

以公开包名 bailian-kb-dsh 发布,能力面:

  • 两个模型可见工具kb_search 返回带来源引用的评分 chunk,kb_chat 返回完整的 grounded 答案
  • 检索服务清单注入 — 把工作空间内 deployed 状态的服务(id / 名称 / 场景)注入会话上下文并周期性刷新,模型据此判断问题能否由知识库回答,而不是猜 agent_id;长清单截断并标明总数
  • 低摩擦鉴权 — 设置页可直接从百炼控制台登录换取 API key 与 workspace id(key 不下发浏览器);已有 bl auth login 的配置在启动时一次性采纳
  • 设置页(web 半) — "Bailian KB" 分区管理凭据、默认服务、服务缓存巡检,React + CSS Modules,经 tsdown 打成浏览器 bundle
  • 管理面 skill — 随包分发 bailian-kb skill,教 agent 用 bl 走建库 / 文档导入 / 服务部署;明确检索面不走 skill

2. 接入仓库工程约定(d24104fa1023cea393bdc

  • 改名为公开包 bailian-kb-dsh,包身份三处对齐(package.json name / cordis.patch.yml insert name / tsdown.config.ts PLUGIN_ID)
  • tsconfig 三件套:tsconfig.json 纯类型检查(oxlint / vp check 自动发现)、tsconfig.build.json 产出 node 半、tsconfig.web.json 隔离检查 web 半
  • vite.config.ts 新增两条针对本包的 lint override:_ 前缀声明"有意不用"、web 半禁止 import node:* 与本仓 CLI 包(host 的 frozen module table 里根本不存在,import 到即运行时崩)
  • 删除已过期的 reference/*.md,参数详情交还 --help

3. 独立发布通道(7bc1c49

  • publish.yml 新增 package=bailian-kb-dsh 选项与独立 job:复用入口 UI 与 setup 步骤,但不复用 publish-stable.mjs / publish-channel.mjs(那两条会把同一版本号广播到锁步包集合并产出 binary,都不适用)
  • 新增 tools/release/publish-kb-dsh.mjs:npm-only,stable 走 Required Reviewers gate,channel 免审批
  • tools/release/lib/packages.mjs 用注释显式记录"本包故意不在白名单里",避免后人当成漏配补进去

4. 文档(491858beb8b0893f21f55a28d95ae023af5

  • 新增 docs/agents/dsh-plugin.md:维护清单(触发条件、四条故意偏离、tsconfig 三件套、包身份必查项),并挂进 AGENTS.md 场景索引
  • 新增 docs/kb-dsh/:bundle 设计与实施方案、runtime-behavior.md(上下文注入策略、服务缓存布局、刷新触发点)
  • 包内 README.md / README.zh.md:安装、配置三种方式与解析优先级、工具契约、错误语义、已知限制
  • AGENTS.md / CONTRIBUTING.md(.zh) / docs/agents/publish.md 同步分层边界与版本例外说明
  • 修正 skill 里的工具数量与 agent_id 必填描述错误,补齐服务清单注入语义与错误处理提示

5. 版本

bailian-kb-dsh 版本 0.1.19,跟随 dsh rc 节奏,不参与 core/runtime/commands/cli/kscli 的版本锁步。

影响面

  • bl / kscli 零影响:新包不被任何现有包依赖,反向依赖被文档与 lint 双重禁止(core / runtime / commands / 产品层永远不许依赖它)
  • vite.config.ts 的 lint override 以 files 限定在本包路径内,不影响其他包
  • publish.ymlbailian-cli / knowledge-studio-cli 两条既有通道加了 inputs.package != 'bailian-kb-dsh' 守卫,行为不变
  • pnpm-lock.yaml 大量新增来自 @deepseek-ai/dsh-* 与 React 的 devDependencies(均为本包私有,且同时声明为 peerDependencies)

验证

  • vp check(format + lint + type check)
  • vp test(本包 13 个测试文件 / 91 个 case:client、tools、chat、sse、service-cache、service-catalog、service-context、console-login、skill、bl-cli、config、endpoints、services)
  • pnpm --filter bailian-kb-dsh run build(tsc 产 node 半 + tsdown 产 dist/web/client.js
  • dsh 侧集成:dsh plugin --profile dev add <repo>/packages/bailian-kb-dshdsh --profile web --dump-config 能看到 tool-bailian-kb 行;设置页能完成控制台登录、kb_search / kb_chat 实际可用

Review 关注点

  1. 发布通道隔离是否彻底 —— 独立 job 的 environment 条件写法、tag 命名 bailian-kb-dsh-v<version>
  2. web 半的 bundle 纯度 —— lint 的 no-restricted-imports 名单与 tsdown 的 CLIENT_EXTERNALS 是否一致
  3. 凭据解析优先级 —— 设置页 / profile patch / 凭据存储与 env 三层的覆盖与"清空即回落"语义
  4. skill 与原生工具的边界文案 —— 检索面走工具、管理面走 bl,是否还有会误导 agent 的表述

- 将分发包名称从 bailian-kb-bundle 改为 bailian-kb-dsh
- 同步更新 README.md 中的包名和卸载命令描述
- 更新 package.json 中的 name 字段
- 修改 cordis.patch.yml 中的注释以匹配新名称
- 确保所有文档和配置引用一致性
- 修改 package.json 中 typecheck 脚本,新增对 tsconfig.web.json 的检查
- 更新 pnpm-lock.yaml 文件,增加多个依赖项和绑定包的版本信息及平台支持
- 新增 react、lightningcss 等多种平台及架构的预编译绑定库
- 添加多种类型定义依赖,提升类型覆盖范围
- 升级部分工具包及插件版本,优化构建和开发体验
- 替换默认服务配置字段为 defaultRetrieveAgentId 和 defaultChatAgentId,支持分别管理检索和对话服务
- 增加 Bailian knowledge base 插件设置命名空间,配置支持用户层叠覆盖和实时生效
- 统一凭证与设置配置的回退链,新增一阶段设置用户层优先读取字段
- 实现凭证值向设置文档的单次迁移,辅助设置页首次展示历史值
- Bailian 页面控制器支持基于设置作用域的双域同步,回显设置字段且支持删除操作
- 工具代码切换为从设置作用域异步解析默认服务 id,agent_id 在运行时均为可选但调用时必填
- README 与文档更新,包含配置项扩展、回退链说明以及 UI 配置页操作说明
- 底层依赖由 `dsh-client-ui-settings-plugins` 切换为 `dsh-client-ui-settings`
- 修正 patch 配置与 API 参数命名,完善错误提示和超时配置读取
- 移除 kb_service_list 相关代码,包括接口定义、服务查询函数和工具定义
- 服务发现改为通过 kscli 命令行工具 `kscli service list` 查询
- 更新文档和注释,删除关于 kb_service_list 的描述和示例
- 删除对服务列表接口路径的引用,保留 kb_search 和 kb_chat 两个工具
- 调整错误处理逻辑,不再附加可用服务信息,错误直接透传
- 修改默认服务 id 提示文本,均改为引用 `kscli service list` 作为服务发现手段
- 移除相关测试内容,包括对 kb_service_list 注册和服务查询测试
- 保持其他功能和接口不变,确保兼容和功能完整性
- 移除独立的 bundle 包及其配置文件和说明文档
- 将原 bundle 的 patch 配置迁移到插件包内的 cordis.patch.yml
- 在插件包 package.json 中声明 dsh.bundle.patch 指向新 patch 文件
- 更新 README,说明插件包即是 bundle,简化安装和本地联调流程
- 调整文档中插件名及卸载命令,统一使用 dsh-tool-bailian-kb
- 修正仓库结构描述,将包称为目录,更准确反映当前结构
- 改进配置解析链和 Web UI 配置页的说明,突出用户层设置及覆盖机制
- 更新 README 中的安装与卸载命令,替换包名为 @ali/bailian-kb-dsh
- 修改 cordis.patch.yml 中的工具名为 '@ali/bailian-kb-dsh'
- 将 package.json 中的包名改为 @ali/bailian-kb-dsh
- 调整内部文档示例中的包名配置一致性
- 修改peerDependencies中相关@deepseek-ai包版本为^0.1.0-rc.6
- 修改devDependencies
- 将部分本地链接依赖改为公开版本号依赖
- 升级 vitest 依赖,增加 @types/debug 的版本信息
- 更新 @deepseek-ai 相关包的版本至0.1.0-rc.6和4.0.1
- 调整依赖树,优化部分包的可选 peerDependencies
- 增加多项 @deepseek-ai 相关包的校验和信息
- 解绑部分包的本地路径依赖,改为版本号引用,提高模块兼容性
- 将包版本号从0.1.0升级到0.1.1
- 保持包描述和主要文件路径不变
- 准备发布新版本以集成最新更改
- 将插件ID由'dsh-tool-bailian-kb'更改为'@ali/bailian-kb-dsh'
- 统一插件ID格式,增强识别一致性
- 便于后续维护及模块加载管理
- 更新 package.json 版本至 0.1.3,完善导出和文件配置
- 引入 SettingsProvider 用于支持路径级 unset 操作
- 将 GET 和 POST 请求共用一个 /bailian-kb/settings 路由,避免重复注册
- POST 接口支持批量更新和删除配置字段,删除操作使用
- 新增 ShellEnvRegistration 接口定义,避免对主包依赖
- 为上下文添加 shellEnv 注册功能支持
- 在注入阶段注册 Bailian 工作空间 ID 环境变量
- 使管理 CLI 命令可访问解析后的工作空间 ID
- 确保子进程环境变量继承设置服务解析结果
- 将包版本号从0.1.3更新为0.1.4
- 保持其他配置内容不变
- 修改文档和代码,将 kb_search 和 kb_chat 工具的 agent_id 参数在 schema 中标记为必填
- 明确模型路径调用时必须显式传递 agent_id,程序化调用缺省时回退默认服务
- 定义工具参数验证时强制 agent_id 必填,防止无效调用的运行时错误
- 调整默认服务回退逻辑为防御机制,保证 schema 校验优先拒绝缺失 agent_id 的请求
- 增强错误提示信息,引导用户正确配置和使用 agent_id 参数
- 更新测试覆盖相关改动,确保 agent_id 必填规则和回退机制符合预期
- 修改说明自动解析凭证和工作空间配置的行为,用户无需手工传递这些值
- 移除已废弃的 kb_service_list 服务发现,使用 kscli
- 更新技能描述,补充命令行工具 kscli 的使用范围与说明
- 细化安装与鉴权步骤,明确不同发行通道及 Node.js 版本要求
- 增加详细的命令用途对照表,便于用户区分不同操作命令
- 优化核心工作流示例,简化上传、建库、部署检索服务步骤
- 补充多种 ID 类型说明,帮助用户正确使用各类标识
- 添加关于危险和不可逆操作的说明及确认要求
- 强调服务版本状态及发布流程,规范草稿与发布版切换
- 新增详细的命令参考文档,覆盖 chunk、config、datacenter、
  doc、kb、query、service 等命令组
- 更新 package 版本号至 0.1.5,标识本次文档与功能更新
- 将@ali/bailian-kb-dsh包的版本号从0.1.5提升到0.1.6
- 保持其他package.json字段不变
- README 文档中将管理面 CLI 名称由 kscli 改为 bl CLI
- 包描述与说明中更新 CLI 名称与对应命令用法
- 技能文档及其命令参考全面替换 kscli 为 bl
- 所有子命令示例和用法文档同步改为 bl 及对应子命令路径
- 更新服务发现命令由 kscli 改为 bl knowledge service list
- 更新鉴权说明改为 bl auth login 及相关配置命令
- 维护命令结构一致性,保证用户可无缝使用 bl 替代原 kscli
- 移除对 bl CLI 登录流程 `bl auth login --console` 的依赖
- 实现了自包含的控制台登录流程,直接使用控制台登录回调协议
- 始终要求签发新 API key,避免旧 key 与新 workspaceId 不匹配问题
- 新增本地 loopback HTTP 服务器接收登录回调并持久化凭据
- 变更面板的自动获取流程,改为通过新登录协议驱动登录
- 添加自动获取登录态的轮询状态,支持登录进度反馈
- 优化页面按钮状态及提示,支持登录 URL 手动打开
- 删除对 bl CLI 配置文件的读取与登录
- 将配置字段调整为高级配置隐藏,支持折叠展开展示
- 为API Key和工作空间ID添加“去获取”外部链接,引导用户至控制台
- 优化填写状态提示,新增已配置完成的绿色成功提示
- 新增高级配置按钮,折叠字段组及保存、放弃操作
- 细化自动填充状态处理,支持失败、等待登录、成功及已配置等多状态显示
- 更新本地化文本,支持高级配置及“去获取”等新文案
- 调整CSS样式,新增高级配置相关样式和状态样式
- 升级版本号至0.1.15
- 将管理技能名称从 bailian-kb-management 改为 bailian-kb
- 调整技能文件路径从 skills/bailian-kb-management 改为 skills/bailian-kb
- 更新 README.md 中关于管理技能的路径说明
- 修改 skill.ts 中注册技能的目录和名称
- 更新技能描述以准确反映当前功能内容
- 引入 yaml 依赖,更新包依赖配置和锁文件
- 新增 ServiceCache 类,实现检索服务缓存机制,缓存位于本地缓存目录
- 实现服务缓存的读取、写入和异步刷新,支持数据的版本校验和过期控制
- 在插件主入口集成服务缓存,支持按 workspace 维度缓存隔离
- 改写默认 agent_id 获取逻辑,支持单服务自动选取和缓存中的默认服务回退
- 支持检测缓存失效时自动刷新,并能在错误消息中附加当前有效服务列表
- 使用 agent/pre-step 上下文消息注入服务目录,替代工具描述中的服务信息,支持动态更新
- 文档更新完善,说明服务清单的行为语义和管理面与检索面的职责分离
- 为管理面技能引入最佳实践,强调服务命名的重要性和描述字段的价值
- 取消暴露服务清单为模型工具,避免重新引入“先列再搜”的请求环节
- 添加对服务清单缓存的动态刷新与过期时间优化,空缓存采用更短TTL以避免首次配置延迟
- 注册工具执行结果监听,检测到管理命令后立即使服务缓存失效并刷新
- 提供新的HTTP路由支持面板强制刷新和获取服务缓存快照
- 实现服务缓存状态接口,方便面板展示缓存健康状况和服务列表数量
- 在前端增加服务缓存视图,显示缓存状态、最后更新时间及刷新按钮
- 支持默认检索服务与对话服务的选择器,允许清除和从缓存服务列表选择
- 移除原有默认服务ID的文本框,避免与选择器内容重复且不同步
- 更新国际化文本,反映默认服务选择器和服务缓存状态相关内容
- 添加单元测试验证空缓存TTL行为及状态快照正确性
…a31ad488c433c5e'

git-subtree-dir: packages/bailian-kb-dsh
git-subtree-mainline: e76ebee
git-subtree-split: b11adcc
包名 @ali/bailian-kb-dsh → bailian-kb-dsh(公开 npm):package.json name +
cordis.patch.yml insert.name + tsdown PLUGIN_ID 三处同步(漏一处即 dsh 运行时崩)。

产物 lib/ → dist/(本仓 .gitignore 忽略 dist 不忽略 lib),连带 main/types/
exports/files/tsdown outDir 同步;.gitignore 补 *.tsbuildinfo。

依赖接 catalog(yaml/typescript/@types/node/vite-plus);测试导入 vitest →
vite-plus/test(全仓统一约定,消掉唯一的 vitest 依赖漂移)。

tsconfig 拆三件套:tsconfig.json 纯类型检查覆盖 src+tests(供 oxlint 自动发现,
含 jsx/DOM),tsconfig.build.json 产出 node 半,tsconfig.web.json 隔离检查 web 半。
补齐 tests 从未被类型检查暴露的一处 partial 输入类型错误。

根 vite.config.ts 新增两条 override:web 半 no-restricted-imports 把 tsdown 构建期
的 bundle purity gate 提前到 lint 期;全包放开 _ 前缀的 no-unused-vars。

文档:新增 docs/agents/dsh-plugin.md,AGENTS.md 项目地图/版本锁步例外/分层边界/
场景索引同步,packages.mjs 注释说明故意不进发布白名单。

格式化(单引号无分号 → 双引号加分号)由 pre-commit 的 vp check --fix 自动完成,
无法单独成 commit,一并纳入。

全仓 vp check 0 error;插件 13 文件 85 测试全绿;build + typecheck 通过。
插件不是 CLI,没有义务维护一份 bl 参数手册。已有的 8 个 reference 文件锚死在
bailian-cli 1.16.0:--description 改为必填后(1.17.1)它就在教一条必然失败的命令。

SKILL.md 备注列改为引导 agent 跑 `bl <命令> --help`(与其自身前置检查第 1 步
一致);核心示例补 --description;命令参考段从死链改为纯指引。

docs/agents/dsh-plugin.md D 项同步更新:不带 reference/,不由生成器产出。
复用同一个 Publish workflow 入口(package 下拉多一项 bailian-kb-dsh),路由到
独立的 publish-kb-dsh.mjs 处理:
- 版本读自身 package.json(不广播全套 bl 版本)
- stable 打 bailian-kb-dsh-v<version> tag(与 bl 的 v<version> 错开命名空间)
- channel 临时 bump 到 0.0.0-beta-<sha>-<stamp>(形态与 bl channel 一致),
  finally 还原 package.json
- 走自身的 tsc + tsdown build,无 binary,无 OSS CDN
- 复用 lib/git.mjs / lib/npm.mjs / lib/proc.mjs 三个薄工具
- 复用 workflow 入口 UI 与 setup 步骤(checkout / pnpm / node 24 / gitleaks
  / install),stable 走 environment: production Required Reviewers gate

不复用 publish-stable.mjs / publish-channel.mjs:它们的 loadAndValidatePackages
会广播 core 版本给全套锁步包并强校验一致性,把 kb-dsh 塞进去第一步就 throw。
故意分开是为了保住这个隔离。

本地 --dry-run 端到端跑通:build → 幂等性查重 → pack + publint + gitleaks →
pnpm publish --tag latest|<channel> --provenance --dry-run;channel 模式的
finally 还原后 git diff 干净。

文档:dsh-plugin.md 补发布小节 + 已知待办(publint 那条 web bundle CJS/ESM
warning);publish.md 加 bailian-kb-dsh 定位;packages.mjs 与 AGENTS.md 的
注释同步指向新的 job 与 script 名。
删除子仓时期特有的溯源信息("从 bl CLI 类型镜像"、验证时间戳、
Endpoint.AccessDenied 归因等冗余展开)——迁入本仓后这些细节已无参照必要。
涉及 api-types.ts / bl-cli.ts / console-login.ts / index.ts /
service-cache.ts / web/bailian-card-controller.ts。
- 修正缓存管理中对 API key 和自动获取按钮的描述,更加准确表述工作区权限限制
- 更新缓存存储字段说明,明确 pipeline_list 字段不稳定,无法用作知识库标签
- 简化执行期无进展显示的描述,去除过度复杂说明
- 明确 top_k 参数为客户端截断,强调服务端返回记录数由检索服务配置决定
- 细化服务画像质量依赖服务名的说明,配合后端描述字段补齐做对应改动准备
- 微调技能最佳实践中关于服务命名指导的表述,强调无语义名称导致检索无法路由
- 说明后端描述字段补齐后,服务描述字段可自动生效,提升文档明确性
- 新增 runtime、commands、kscli、e2e 和 bailian-kb-dsh 包说明
- 扩展 core 包功能描述,包含配置、错误等内容
- 明确 cli 包为完整产品入口
- 添加 skills 目录及对应功能说明
- 调整目录顺序,增强文档清晰度和完整性
- 增补详细的 runtime-behavior.md,说明插件的内部运行逻辑和设计取舍
- 完善 packages/bailian-kb-dsh 的 README,添加英文版及使用要求说明
- 细化配置项说明,示例及环境变量配置方式展示
- 增加 LICENSE 文件,明确 Apache 2.0 许可证
- 说明插件安装、配置、和卸载的详细步骤
- 规范 README 和文档多语言版本的同步更新及说明管理
- 说明服务发现、缓存刷新及代理行为的设计和技术细节
- 细化 Web UI 配置页功能介绍和操作指导
- 将知识工具数量描述从三个改为两个
- 将agent_id要求从可选改为必需
- 更新bailian-card-controller中credentials引用数量从三个到四个
- 维持失败读取时页面可用和写操作正常工作逻辑
- 补查型工具(service_find)确认不暴露服务清单,避免与catalog冲突
- 清单内容策略扩展,0服务时注入明确禁止猜测id的提示
- 工具描述保持静态,上下文消息注入带source的UserMessage实现动态清单
- bl命令及安装提示仅在动态文本中出现,避免静态描述频繁消耗token
- 错误处理中4xx刷新并追加服务清单,0服务状态下明确提示不重试须创建部署
- service-catalog新增无服务提示及刷新服务列表构建函数
- service-context调整使用新清单构建逻辑,缓存空时注入无服务通知
- tools调整描述文案,提示来自上下文消息且拒绝猜测
- README补充bl CLI安装使用说明
- 测试补充无服务情况注入提示及刷新列表文本内容校验
- 将package.json中的版本号从0.1.18更新为0.1.19
- 保持项目描述和关键词不变
- 为发布新版本做准备
@clark-fc
clark-fc merged commit 4067b2c into main Aug 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant